package com.vtuzx.kingdee.xqc_api.service;

import com.vtuzx.core.VtuzxException;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.core.bean.dto.VtuzxToken;
import com.vtuzx.web.bean.VtuzxDownloadBean;
import org.bson.types.ObjectId;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * 采购服务
 */
public interface IXqcOtherService {

    /**
     * 绑定箱号和RFID
     *
     * @param boxNo 箱号
     * @param rfid RFID
     */
    void bindOtherOutBoxRfid(String boxNo, String rfid) throws VtuzxException;

    /**
     * 根据箱号获取车间入库的物料信息(绑定RFID专用)
     *
     * @param boxNo 箱号
     * @return 车间入库的物料信息
     */
    VtuzxMap getOtherOutMaterialForBind(String boxNo) throws VtuzxException;

    /**
     * 保存用户生产领料单
     *
     * @param _userId 用户ID
     */
    void saveUserOtherIn(ObjectId _userId, String name, Map<String, Object> param) throws VtuzxException;

    /**
     * 添加用户生产领料箱号+数量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param boxNo 箱号
     * @return 添加后物料信息
     */
    VtuzxMap addUserOtherInMaterialBox(ObjectId _userId, String userName, String stockNo, String locationNo, String boxNo, double count) throws VtuzxException;


    /**
     * 添加用户采购入库箱号+数量
     *
     * @param _userId 用户ID
     * @param userName 用户名
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param boxList 箱号列表
     * @return 添加后物料信息
     */
    VtuzxMap addUserOtherInMaterialBoxList(ObjectId _userId, String userName, String stockNo, String locationNo, List<Map<String, Object>> boxList);

    /**
     * 删除用户生产领料单分录
     *
     * @param _userId 用户ID
     * @return 删除后物料信息
     */
    VtuzxMap deleteUserOtherInMaterialBox(ObjectId _userId, String id);

    /**
     * 删除用户生产领料单分录
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param materialNo 物料编码
     */
    void deleteUserOtherInMaterial(ObjectId _userId, String id);

    /**
     * 删除用户生产领料单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     */
    void deleteUserOtherIn(ObjectId _userId, String stockNo);

    /**
     * 更新用户生产领料单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param materialNo 物料编码
     * @param boxNo 物料编码
     * @param count 数量
     * @return 更新后物料信息
     */
    VtuzxMap updateUserOtherInMaterialBox(ObjectId _userId, String stockNo, String locationNo, String materialNo, String boxNo, double count);

    /**
     * 获取用户未保存生产领料单分录列表
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserOtherInMaterial(ObjectId _userId, String stockNo);

    /**
     * 获取用户未保存生产领料单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserOtherInMaterialBox(ObjectId _userId, String _detailId);

    /**
     * 获取创建者生产领料单列表
     *
     * @param _userId 用户ID
     * @param param 仓库编码
     * @return 采购入库单列表
     */
    VtuzxMap getOtherInBill(ObjectId _userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 获取创建者生产领料单分录
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param billNo 采购入库单号
     * @return 采购入库单分录
     */
    VtuzxMap getOtherInBillDetail(ObjectId _userId, String stockNo, String billNo);

    /**
     * 获取创建者生产领料单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 采购入库单分录的箱号列表
     */
    VtuzxMap getOtherInBillDetailBox(ObjectId _userId, String _detailId);

    /**
     * 上传采购收货单
     *
     * @param _userId 用户ID
     * @param userName 用户名
     * @param file 文件
     */
    void uploadOtherColBill(ObjectId _userId, String userName, File file) throws Exception;


    /**
     * 保存采购收货单
     *
     * @param _userId 用户ID
     * @param userName 用户名
     * @param param 采购收货单详细
     */
    VtuzxMap saveOtherColBill(ObjectId _userId, String userName, Map<String, Object> param) throws VtuzxException;

    /**
     * 删除采购收货单
     *
     * @param _userId 用户ID
     * @param billNo 单号
     */
    void deleteOtherColBill(ObjectId _userId, String billNo) throws VtuzxException;


    /**
     * 审核采购收货单
     *
     * @param _userId 用户ID
     * @param userName 用户名
     * @param billNo 单号
     */
    VtuzxMap auditOtherColBill(ObjectId _userId, String userName, String billNo) throws VtuzxException;

    /**
     * 反审核采购收货单
     *
     * @param _userId 用户ID
     * @param billNo 单号
     */
    VtuzxMap unauditOtherColBill(ObjectId _userId, String billNo) throws VtuzxException;

    /**
     * 根据RFID获取采购收货的物料信息
     *
     * @param rfidList RFID列表
     * @return 采购收货的物料信息
     */
    VtuzxMap getOtherColMaterialByRfid(List<String> rfidList);

    /**
     * 获取采购收货单物料列表
     *
     * @param _userId 用户ID
     * @param param 检索条件
     * @param pageIndex 页号
     * @param pageSize 页大小
     * @return 采购收货单物料箱号列表
     */
    VtuzxMap getOtherColBill(ObjectId _userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 根据箱号获取采购收货的物料信息
     *
     * @param boxNo 箱号
     * @return 采购收货的物料信息
     */
    VtuzxMap getOtherColMaterial(String boxNo) throws VtuzxException;

    /**
     * 根据包材编码获取物料信息
     *
     * @param boxNo 箱码
     * @param supplierNo 供应商编码
     * @param materialNo 物料编码
     * @param batchNo 批次号
     * @param flowNo 流水号
     * @param count 数量
     * @return 采购收货的物料信息
     */
    VtuzxMap getOtherColMaterial(String boxNo, String supplierNo, String materialNo, String batchNo, String flowNo, int count) throws VtuzxException;


    /**
     * 获取采购收货单物料列表
     *
     * @param _userId 用户ID
     * @param billNo 单号
     * @return 采购收货单物料箱号列表
     */
    VtuzxMap getOtherColBillDetail(ObjectId _userId, String billNo) throws VtuzxException;

    /**
     * 下载采购收货单箱号清单
     *
     * @param _userId 用户ID
     * @param billNo 单号
     * @return 采购收货单箱号清单excel文件
     */
    VtuzxDownloadBean downloadOtherColBillBarcode(ObjectId _userId, String billNo) throws Exception;

    /**
     * 下载采购收货单箱号清单
     *
     * @param _userId 用户ID
     * @param billNoList 单号列表
     * @return 采购收货单箱号清单excel文件
     */
    VtuzxDownloadBean downloadOtherColBillBarcodeList(ObjectId _userId, List<String> billNoList) throws Exception;


    /**
     * 根据箱号获取采购收货的物料信息(绑定RFID专用)
     *
     * @param boxNo 箱号
     * @return 采购收货的物料信息
     */
    VtuzxMap getOtherColMaterialForBind(String boxNo) throws VtuzxException;

    /**
     * 根据箱号获取车间入库的物料信息(绑定RFID专用)
     *
     * @param boxNo 箱号
     * @return 车间入库的物料信息
     */
    VtuzxMap getPrdInMaterialForBind(String boxNo) throws VtuzxException;

    /**
     * 修改其他入库打印状态
     * @param userId
     * @param name
     * @param param
     * @return
     */
    VtuzxMap updateOtherInSeal(ObjectId userId, String name, Map<String, Object> param);

    /**
     * 下载其他入库详情
     * @param token
     * @param param
     * @return
     * @throws Exception
     */
    VtuzxDownloadBean downloadOtherInDetail(VtuzxToken token, Map<String, Object> param) throws Exception;
}
